#include <bits/stdc++.h>
#ifdef dbg
#define D(...) fprintf(stderr, __VA_ARGS__)
#define DD(...) D(#__VA_ARGS__ " = "), debug_helper::debug(__VA_ARGS__), D("\n")
#include "C:\Users\wsyear\Desktop\OI\templates\debug.hpp"
#else
#define D(...) ((void)0)
#define DD(...) ((void)0)
#endif
#define rep(i, j, k) for (int i = (j); i <= (k); ++i)
#define per(i, j, k) for (int i = (j); i >= (k); --i)
#define SZ(v) int((v).size())
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second
#define gc getchar
#define pc putchar
using ll = long long;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;

using namespace std;

const int N = 1000010;

int n;
double rad[N];
pair<double, double> a[N];

inline double sqr(double x) { return x * x; }

int main() {
  freopen("temple.in", "r", stdin);
  freopen("temple.out", "w", stdout);
  scanf("%d", &n);
  rep (i, 1, n) {
    double x, y; scanf("%lf%lf", &x, &y);
    rad[i] = min(sqr(x) + sqr(y / 2), sqr(x / 2) + sqr(y));
  }
  sort(rad + 1, rad + n + 1), reverse(rad + 1, rad + n + 1);
  double l = 0, r = 1E7;
  rep (_, 1, 60) {
    double mid = (l + r) * .5;
    bool flag = 1;
    rep (i, 1, n) {
      if (sqr(mid) < rad[i]) { flag = 0; break; }
      double sp = sqrt(sqr(mid) - rad[i]);
      a[i] = make_pair(- sp + 1, sp);
      if (a[i].fi > a[i].se) { flag = 0; break; }
    }
    if (flag) {
      double L = -1E9, R = 1E9;
      rep (i, 1, n) {
        int tmp = 0;
        if ((n & 1) && (i & 1)) tmp = (n >> 1) - ((i - 1) >> 1);
        if ((n & 1) && !(i & 1)) tmp = (n >> 1) + ((i + 1) >> 1);
        if (!(n & 1) && (i & 1)) tmp = (n >> 1) - ((i + 1) >> 1);
        if (!(n & 1) && !(i & 1)) tmp = (n >> 1) + ((i - 1) >> 1);
        L = max(L, a[i].fi + tmp), R = min(R, a[i].se + tmp);
      }
      flag &= (L <= R);
    }
    if (flag) r = mid;
    else l = mid;
  }
  printf("%.6f", l);
}